

// axios 封装 
import axios from "axios"
// import {useRouter} from "vue"   setup 
// const router = useRouter()
// import router from "@/router"
const baseURL = "http://localhost:3000/";     // 基路径 

const AUTH_TOKEN = "";
// axios.defaults.baseURL = baseURL;    // 使用反向代理就不需要使用axios基路径 
// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

import { Loading,Message } from 'element-ui'
var load = null;
export function showLoading(msg){
  msg = msg || '请求中'
  load && load.close();
  load = Loading.service({
    lock: true,
    text: msg,
    spinner: 'el-icon-loading',
    background: 'rgba(0, 0, 0, 0.7)'
  })
}
export function showSuccess(msg){
    msg = msg || '成功'
    load && load.close();
    Message({
      message: msg,
      type: 'success',
    })
}
export function showError(msg){ 
  msg = msg || "失败"
  load && load.close();
  Message({
    message: msg,
    type: 'error',
  })
}

// 拦截器   Interceptors

// 请求发送的拦截器  request
axios.interceptors.request.use(function (config) {
  // 成功
  // loading 
 
  const token = sessionStorage.getItem("authtoken")?sessionStorage.getItem("authtoken"):'';
  config.headers.token = token 
  console.log(config)
  showLoading();
  return config;
}, function (error) {
  // 失败
  showError("请求失败")
  return Promise.reject(error);
});

// 请求响应的拦截器  response
axios.interceptors.response.use(function (response) {
  console.log(response)
  // 成功
  //  清除Loading 效果
  
  // 判断 200 表示成功
  if(response.data.code==200){
    showSuccess(response.data.msg)
  }else{
    if(response.data.code==3000){  // token无效 重新登录
      // router.replace({name:"login"})
    }
    showError(response.data.msg)
  }
  return response;
}, function (error) {
  // 失败 
  showError("响应失败")
  return Promise.reject(error);
});

// get post patch delete  

export function get(url,params,headers){
  return new Promise(function(resolve,reject){
      axios.get(url,{
        params,
        headers,
      })
      .then(res=>{
        resolve(res.data); // axios请求的数据会 在 data 获取  res.data 
      })
      .catch(err=>{
        reject(err);
      })
  })
}

export function post(url,body,headers){
   return new Promise(function(resolve,reject){
      axios.post(url,body,{
        headers,
      })
      .then(res=>{
        resolve(res.data); // axios请求的数据会 在 data 获取  res.data 
      })
      .catch(err=>{
        reject(err);
      })
   })
}


export function patch(url,data,headers){
  return new Promise(function(resolve,reject){
      axios.patch(url,data,{
        headers
      })
      .then(res=>{
        resolve(res.data); // axios请求的数据会 在 data 获取  res.data 
      })
      .catch(err=>{
        reject(err);
      })
  })
}

export function Delete(url,body,headers){
   return new Promise(function(resolve,reject){
      axios.delete(url,body,{
        headers,
      })
      .then(res=>{
        resolve(res.data); // axios请求的数据会 在 data 获取  res.data 
      })
      .catch(err=>{
        reject(err);
      })
   })
}


export {
  baseURL,
  axios
}